Skip to content

Implement Catchup TV support and enhance program management - #200

Merged
ProdigyV21 merged 4 commits into
ProdigyV21:mainfrom
Himanth-reddy:feature/catchup-tv
May 18, 2026
Merged

Implement Catchup TV support and enhance program management#200
ProdigyV21 merged 4 commits into
ProdigyV21:mainfrom
Himanth-reddy:feature/catchup-tv

Conversation

@Himanth-reddy

Copy link
Copy Markdown
Collaborator

This pull request adds comprehensive support for IPTV catchup/rewind features by tracking catchup capabilities on a per-channel basis and generating appropriate catchup stream URLs. It introduces new fields to the IptvChannel model, adapts program retention logic to each channel's catchup window, and implements robust parsing and URL generation for various catchup types.

Catchup/rewind feature support:

  • Added new fields to IptvChannel (catchupDays, catchupType, catchupSource) to represent catchup capabilities, and updated parsing logic to populate these fields from both M3U and Xtream sources. [1] [2] [3] [4]
  • Implemented the getCatchupUrl method to generate catchup stream URLs for different provider types (Xtream, Flussonic, TS, append/shift, and template-based) using the new channel fields.

Per-channel catchup window and program retention:

  • Changed logic throughout the repository to calculate recent program cutoffs and retention limits per channel, based on each channel's catchup window, instead of using a fixed 30-minute window. This affects EPG parsing, now/next building, and recent program selection. [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]

Xtream and M3U parsing improvements:

  • Enhanced Xtream playlist parsing to extract catchup-related fields (tv_archive, tv_archive_duration) and set channel catchup properties accordingly. [1] [2]
  • Improved credential extraction from Xtream URLs to handle cases where credentials are embedded in the URL path, not just query parameters.

Configuration and limits:

  • Added a new constant to control the maximum number of recent catchup programs retained per channel.

- Extended IptvChannel and Xtream models with catchup metadata.
- Updated IptvRepository to parse catchup tags from M3U and Xtream sources.
- Implemented getCatchupUrl for Xtream, Flussonic, and M3U timeshift modes.
- Extended EPG retention to store up to 7 days of historical programs.
- Added 'Day Selector' to EpgGrid for jumping back in time.
- Updated ProgramCell and LiveTvScreen to support archive playback flow.
@Himanth-reddy

Copy link
Copy Markdown
Collaborator Author

I was able to see the before programs in archive but iam not able to access them due to navigation it is just difficult to tell ai what is happening because i dont even have any idea about how does the navigation works so please check out the navigation and tell me what to do

@Himanth-reddy
Himanth-reddy requested a review from ProdigyV21 May 16, 2026 16:02
@ProdigyV21

Copy link
Copy Markdown
Owner

There are two sides in the EPG:

  1. Left side = ChannelRow
    This is the channel list. It is already focusable and D-pad friendly.

  2. Right side = ProgramsRow / ProgramCell
    This is the timeline with the actual EPG programs. For catchup, this is the important part, because old archive programs need to be selectable.

The problem right now is that the app can focus/select channels easily, but it does not have a clean D-pad path into the individual program cells.

What I think you should implement next:

  • When focus is on a ChannelRow and the user presses RIGHT, move focus into that same channel’s current/nearest program cell.
  • Inside ProgramCell:
    • LEFT/RIGHT should move between program cells in the same row.
    • UP/DOWN should move to the closest program cell in the previous/next channel row.
    • OK/ENTER should select that program.
  • If the selected program is an old archive program, call:
    onChannelSelect(channel, program)
  • If it is the live/current program, call:
    onChannelSelect(channel, null)
  • If the user presses LEFT from the first program cell, move focus back to the ChannelRow.

So the catchup URL part is mostly okay. The missing part is making ProgramCell a real focus target and wiring D-pad movement between channel rows and program cells.

@ProdigyV21
ProdigyV21 marked this pull request as ready for review May 18, 2026 08:58
@ProdigyV21
ProdigyV21 merged commit df379e0 into ProdigyV21:main May 18, 2026
1 check passed
@Himanth-reddy Himanth-reddy added gssoc-approved level:advanced Advanced level task quality:exceptional Exceptional code implementation type:feature New feature or improvement gssoc:approved GSSoC approved contribution quality:clean Clean code implementation and removed gssoc:approved quality:exceptional Exceptional code implementation labels Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gssoc:approved GSSoC approved contribution level:advanced Advanced level task quality:clean Clean code implementation type:feature New feature or improvement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants